#ifndef __TOKEN__
#define __TOKEN__
#include <QString>

enum TokenTypeEnum
{
	ETokenUnprocessed = 0,
	ETokenWhitespace,
	ETokenShortCommentStart,
	ETokenLongCommentStart,
	ETokenString,
	ETokenLongBracketStart,
    //ETokenLongBracketEnd,
	ETokenSingleQuote,
	ETokenDoubleQuote,
	ETokenSlash,
    ETokenDot,
    ETokenComma,
	ETokenNumber,
    ETokenEqualSign,
	ETokenWord,
    ETokenConcatenation,
	ETokenUnfinishedString,
	ETokenMismatchedEnd,
    ETokenOpenParenthesis,
    ETokenCloseParenthesis,
    ETokenOpenBracket,
    ETokenCloseBracket,
    ETokenOpenBrace,
    ETokenCloseBrace,
    ETokenColon,   
    ETokenNewLine,
    ETokenComment,
    ETokenLocalIdentifier,
    ETokenError,
    ETokenParameter,
    ETokenGlobalIdentifier,
    ETokenUnrecognizedGlobal,
    ETokenStandardFunction,
    ETokenGlobalMethod,
    ETokenStandardMethod,
    //keywords
    ETokenAnd,
	ETokenBreak,
	ETokenDo,
	ETokenElse,
	ETokenElseif,
	ETokenEnd,
	ETokenFalse,
	ETokenFor,
	ETokenFunction,
	ETokenIf,
	ETokenIn,
	ETokenLocal,
	ETokenNil,
	ETokenNot,
	ETokenOr,
	ETokenRepeat,
	ETokenReturn,
	ETokenThen,
	ETokenTrue,
	ETokenUntil,
	ETokenWhile,
    ETokenTypeLast
};

class LuaToken
{
    QString m_text;
	int m_start;
	int m_length;
	bool m_processed;
	int m_indent;
	bool m_isTab;
	TokenTypeEnum m_type;
public:
    LuaToken(QString aText, int aStart, int aLength);
    QString getText();
	void setProcessed(bool aProcessed);
	bool getProcessed();
	int getStart();
	int getLength();
	void setLength(int aLength);
	int getIndent();
	void setIndent(int aIndent);
	TokenTypeEnum getType();
	void setType(TokenTypeEnum aType);
    void appendText(QString aText);
	void setTab(bool aTab);
	bool isTab();
};
#endif
